package com.yuanqi.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yuanqi.entity.WareDelivery;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* @author HP
* @description 针对表【ware_delivery(出库单)】的数据库操作Service
* @createDate 2025-08-26 14:58:48
*/
public interface WareDeliveryService extends IService<WareDelivery> {

    /**
     * 分页查询出库单
     * @param page 页码
     * @param size 每页大小
     * @param deliveryCode 出库单号
     * @param warehouseId 仓库ID
     * @param status 状态
     * @return 分页数据
     */
    IPage<WareDelivery> listDeliveries(Integer page, Integer size, String deliveryCode, Long warehouseId, Integer status);
    
    /**
     * 获取出库单详情
     * @param id 出库单ID
     * @return 出库单详情，包含出库明细项
     */
    Map<String, Object> getDeliveryDetail(Long id);
    
    /**
     * 创建出库单
     * @param delivery 出库单信息
     * @param items 出库单明细项
     * @return 是否成功
     */
    boolean createDelivery(WareDelivery delivery, List<Map<String, Object>> items);
    
    /**
     * 提交出库单审核
     * @param id 出库单ID
     * @return 是否成功
     */
    boolean submitDelivery(Long id);
    
    /**
     * 审核出库单
     * @param id 出库单ID
     * @return 是否成功
     */
    boolean approveDelivery(Long id);

    /**
     * 驳回出库单
     * @param id 出库单ID
     * @return 是否成功
     */
    boolean rejectDelivery(Long id);
    
    /**
     * 执行出库
     * @param id 出库单ID
     * @return 是否成功
     */
    boolean executeDelivery(Long id);
    
    /**
     * 更新出库单
     * @param delivery 出库单信息
     * @param items 出库单明细项
     * @return 是否成功
     */
    boolean updateDelivery(WareDelivery delivery, List<Map<String, Object>> items);
    
    /**
     * 获取出库记录
     * @param deliveryCode 出库单号
     * @param productName 商品名称
     * @param warehouseId 仓库ID
     * @param skuId 商品SKU ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 出库记录列表
     */
    List<Map<String, Object>> getDeliveryRecords(String deliveryCode, String productName, Long warehouseId, Long skuId, String startDate, String endDate);
}
